package com.aispeech.testcustom.utils;

import android.util.Log;
import java.util.Locale;

/**
 * Created by rain on 2016/12/17.
 * 日子等级对应
 * 0:不打印
 * 1:v
 * 2:d
 * 3:i
 * 4:w
 * 5:e
 * 不传tag时,默认用titest.
 */

public class TiLog {
    public static String TAG = "titest";//默认tag

    public static void setLoglevel(int loglevel) {
        TiLog.e("日志等级:"+loglevel);
        TiLog.loglevel = loglevel;
        isDebug = loglevel == 0 ? false : true;
    }

    //0:no log ; 1, 2, 3, 4,
    private static int loglevel = 0;
    private static boolean isDebug = true;  //BuildConfig.DEBUG;

    private TiLog() {
        //no new
    }


    public static void v(String msg) {
        if (isDebug && loglevel <= 1)
            Log.v(TAG, buildMessage(msg));
    }

    public static void d(String msg) {
        if (isDebug && loglevel <= 2)
            Log.d(TAG, buildMessage(msg));
    }

    public static void i(String msg) {
        if (isDebug && loglevel <= 3)
            Log.i(TAG, buildMessage(msg));
    }

    public static void w(String msg) {
        if (isDebug && loglevel <= 4)
            Log.w(TAG, buildMessage(msg));

    }

    public static void e(String msg) {
        if (isDebug)
            Log.e(TAG, buildMessage(msg));
    }


    public static void v(String tag, String msg) {
        if (isDebug && loglevel <= 1)
            Log.v(tag, buildMessage(msg));
    }

    public static void d(String tag, String msg) {
        if (isDebug && loglevel <= 2)
            Log.d(tag, buildMessage(msg));
    }

    public static void i(String tag, String msg) {
        if (isDebug && loglevel <= 3)
            Log.i(tag, buildMessage(msg));
    }

    public static void w(String tag, String msg) {
        if (isDebug && loglevel <= 4)
            Log.w(tag, buildMessage(msg));
    }

    public static void e(String tag, String msg) {
        if (isDebug)
            Log.e(tag, buildMessage(msg));
    }


    private static String buildMessage(String msg) {
        String caller = "<unknow>";
        StackTraceElement[] trace = new Throwable().fillInStackTrace().getStackTrace();
        for (int i = 2; i < trace.length; i++) {
            Class<?> clazz = trace[i].getClass();
            if (!clazz.equals(TiLog.class)) {

                String callingClass = trace[i].getClassName();
                callingClass = callingClass.substring(callingClass.lastIndexOf(".") + 1);
                callingClass = callingClass.substring(callingClass.lastIndexOf("$") + 1);
                caller = callingClass + "." + trace[i].getMethodName() + " at LineNumber:"+trace[i].getLineNumber();
                break;
            }
        }
        return String.format(Locale.CHINA, "[%d] %s:%s", Thread.currentThread().getId(), caller, msg);
    }
}
